// 《围棋》作者版权所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:buildarm64&&darwin&&！ios 
// /+构建arm64，达尔文，！ios 

package cpu

func osInit() {
	ARM64.HasATOMICS = sysctlEnabled([]byte("hw.optional.armv8_1_atomics\x00"))
	ARM64.HasCRC32 = sysctlEnabled([]byte("hw.optional.armv8_crc32\x00"))

	// Mac OS 11.0 
	// 上的以下功能没有hw.optional sysctl值，无法动态检测其受支持的状态。假设
	// Apple Silicon M1支持的CPU功能作为最小功能集
	// /提供给运行在darwin/arm64上的所有Go程序。
	ARM64.HasAES = true
	ARM64.HasPMULL = true
	ARM64.HasSHA1 = true
	ARM64.HasSHA2 = true
}

// go:noescape 
func getsysctlbyname(name []byte) (int32, int32)

func sysctlEnabled(name []byte) bool {
	ret, value := getsysctlbyname(name)
	if ret < 0 {
		return false
	}
	return value > 0
}
